\n\t * ```\n\t */\n\texports.default = {\n\t bind: function bind(el, binding, vnode) {\n\t var id = nodeList.push(el) - 1;\n\t var documentHandler = function documentHandler(e) {\n\t if (!vnode.context || el.contains(e.target) || vnode.context.popperElm && vnode.context.popperElm.contains(e.target)) return;\n\t\n\t if (binding.expression) {\n\t el[ctx].methodName && vnode.context[el[ctx].methodName] && vnode.context[el[ctx].methodName]();\n\t } else {\n\t el[ctx].bindingFn && el[ctx].bindingFn();\n\t }\n\t };\n\t el[ctx] = {\n\t id: id,\n\t documentHandler: documentHandler,\n\t methodName: binding.expression,\n\t bindingFn: binding.value\n\t };\n\t },\n\t update: function update(el, binding) {\n\t el[ctx].methodName = binding.expression;\n\t el[ctx].bindingFn = binding.value;\n\t },\n\t unbind: function unbind(el) {\n\t var len = nodeList.length;\n\t\n\t for (var i = 0; i < len; i++) {\n\t if (nodeList[i][ctx].id === el[ctx].id) {\n\t nodeList.splice(i, 1);\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 246 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t/**\n\t* Modified from https://github.com/sdecima/javascript-detect-element-resize\n\t*\n\t* version: 0.5.3\n\t**/\n\t\n\t/* istanbul ignore next */\n\tvar requestFrame = function () {\n\t var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) {\n\t return window.setTimeout(fn, 20);\n\t };\n\t return function (fn) {\n\t return raf(fn);\n\t };\n\t}();\n\t\n\t/* istanbul ignore next */\n\tvar cancelFrame = function () {\n\t var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n\t return function (id) {\n\t return cancel(id);\n\t };\n\t}();\n\t\n\t/* istanbul ignore next */\n\tvar resetTrigger = function resetTrigger(element) {\n\t var trigger = element.__resizeTrigger__;\n\t var expand = trigger.firstElementChild;\n\t var contract = trigger.lastElementChild;\n\t var expandChild = expand.firstElementChild;\n\t\n\t contract.scrollLeft = contract.scrollWidth;\n\t contract.scrollTop = contract.scrollHeight;\n\t expandChild.style.width = expand.offsetWidth + 1 + 'px';\n\t expandChild.style.height = expand.offsetHeight + 1 + 'px';\n\t expand.scrollLeft = expand.scrollWidth;\n\t expand.scrollTop = expand.scrollHeight;\n\t};\n\t\n\t/* istanbul ignore next */\n\tvar checkTriggers = function checkTriggers(element) {\n\t return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;\n\t};\n\t\n\t/* istanbul ignore next */\n\tvar scrollListener = function scrollListener(event) {\n\t var _this = this;\n\t\n\t resetTrigger(this);\n\t if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\n\t this.__resizeRAF__ = requestFrame(function () {\n\t if (checkTriggers(_this)) {\n\t _this.__resizeLast__.width = _this.offsetWidth;\n\t _this.__resizeLast__.height = _this.offsetHeight;\n\t _this.__resizeListeners__.forEach(function (fn) {\n\t fn.call(_this, event);\n\t });\n\t }\n\t });\n\t};\n\t\n\t/* Detect CSS Animations support to detect element display/re-attach */\n\tvar attachEvent = document.attachEvent;\n\tvar DOM_PREFIXES = 'Webkit Moz O ms'.split(' ');\n\tvar START_EVENTS = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' ');\n\tvar RESIZE_ANIMATION_NAME = 'resizeanim';\n\tvar animation = false;\n\tvar keyFramePrefix = '';\n\tvar animationStartEvent = 'animationstart';\n\t\n\t/* istanbul ignore next */\n\tif (!attachEvent) {\n\t var testElement = document.createElement('fakeelement');\n\t if (testElement.style.animationName !== undefined) {\n\t animation = true;\n\t }\n\t\n\t if (animation === false) {\n\t var prefix = '';\n\t for (var i = 0; i < DOM_PREFIXES.length; i++) {\n\t if (testElement.style[DOM_PREFIXES[i] + 'AnimationName'] !== undefined) {\n\t prefix = DOM_PREFIXES[i];\n\t keyFramePrefix = '-' + prefix.toLowerCase() + '-';\n\t animationStartEvent = START_EVENTS[i];\n\t animation = true;\n\t break;\n\t }\n\t }\n\t }\n\t}\n\t\n\tvar stylesCreated = false;\n\t/* istanbul ignore next */\n\tvar createStyles = function createStyles() {\n\t if (!stylesCreated) {\n\t var animationKeyframes = '@' + keyFramePrefix + 'keyframes ' + RESIZE_ANIMATION_NAME + ' { from { opacity: 0; } to { opacity: 0; } } ';\n\t var animationStyle = keyFramePrefix + 'animation: 1ms ' + RESIZE_ANIMATION_NAME + ';';\n\t\n\t // opacity: 0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n\t var css = animationKeyframes + '\\n .resize-triggers { ' + animationStyle + ' visibility: hidden; opacity: 0; }\\n .resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; }\\n .resize-triggers > div { background: #eee; overflow: auto; }\\n .contract-trigger:before { width: 200%; height: 200%; }';\n\t\n\t var head = document.head || document.getElementsByTagName('head')[0];\n\t var style = document.createElement('style');\n\t\n\t style.type = 'text/css';\n\t if (style.styleSheet) {\n\t style.styleSheet.cssText = css;\n\t } else {\n\t style.appendChild(document.createTextNode(css));\n\t }\n\t\n\t head.appendChild(style);\n\t stylesCreated = true;\n\t }\n\t};\n\t\n\t/* istanbul ignore next */\n\tvar addResizeListener = exports.addResizeListener = function addResizeListener(element, fn) {\n\t if (attachEvent) {\n\t element.attachEvent('onresize', fn);\n\t } else {\n\t if (!element.__resizeTrigger__) {\n\t if (getComputedStyle(element).position === 'static') {\n\t element.style.position = 'relative';\n\t }\n\t createStyles();\n\t element.__resizeLast__ = {};\n\t element.__resizeListeners__ = [];\n\t\n\t var resizeTrigger = element.__resizeTrigger__ = document.createElement('div');\n\t resizeTrigger.className = 'resize-triggers';\n\t resizeTrigger.innerHTML = '
';\n\t element.appendChild(resizeTrigger);\n\t\n\t resetTrigger(element);\n\t element.addEventListener('scroll', scrollListener, true);\n\t\n\t /* Listen for a css animation to detect element display/re-attach */\n\t if (animationStartEvent) {\n\t resizeTrigger.addEventListener(animationStartEvent, function (event) {\n\t if (event.animationName === RESIZE_ANIMATION_NAME) {\n\t resetTrigger(element);\n\t }\n\t });\n\t }\n\t }\n\t element.__resizeListeners__.push(fn);\n\t }\n\t};\n\t\n\t/* istanbul ignore next */\n\tvar removeResizeListener = exports.removeResizeListener = function removeResizeListener(element, fn) {\n\t if (attachEvent) {\n\t element.detachEvent('onresize', fn);\n\t } else {\n\t element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n\t if (!element.__resizeListeners__.length) {\n\t element.removeEventListener('scroll', scrollListener);\n\t element.__resizeTrigger__ = !element.removeChild(element.__resizeTrigger__);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 247 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n\t * @license MIT */\n\t\n\t;(function(root, factory) {\n\t\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.NProgress = factory();\n\t }\n\t\n\t})(this, function() {\n\t var NProgress = {};\n\t\n\t NProgress.version = '0.2.0';\n\t\n\t var Settings = NProgress.settings = {\n\t minimum: 0.08,\n\t easing: 'ease',\n\t positionUsing: '',\n\t speed: 200,\n\t trickle: true,\n\t trickleRate: 0.02,\n\t trickleSpeed: 800,\n\t showSpinner: true,\n\t barSelector: '[role=\"bar\"]',\n\t spinnerSelector: '[role=\"spinner\"]',\n\t parent: 'body',\n\t template: '
'\n\t };\n\t\n\t /**\n\t * Updates configuration.\n\t *\n\t * NProgress.configure({\n\t * minimum: 0.1\n\t * });\n\t */\n\t NProgress.configure = function(options) {\n\t var key, value;\n\t for (key in options) {\n\t value = options[key];\n\t if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n\t }\n\t\n\t return this;\n\t };\n\t\n\t /**\n\t * Last number.\n\t */\n\t\n\t NProgress.status = null;\n\t\n\t /**\n\t * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n\t *\n\t * NProgress.set(0.4);\n\t * NProgress.set(1.0);\n\t */\n\t\n\t NProgress.set = function(n) {\n\t var started = NProgress.isStarted();\n\t\n\t n = clamp(n, Settings.minimum, 1);\n\t NProgress.status = (n === 1 ? null : n);\n\t\n\t var progress = NProgress.render(!started),\n\t bar = progress.querySelector(Settings.barSelector),\n\t speed = Settings.speed,\n\t ease = Settings.easing;\n\t\n\t progress.offsetWidth; /* Repaint */\n\t\n\t queue(function(next) {\n\t // Set positionUsing if it hasn't already been set\n\t if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\t\n\t // Add transition\n\t css(bar, barPositionCSS(n, speed, ease));\n\t\n\t if (n === 1) {\n\t // Fade out\n\t css(progress, { \n\t transition: 'none', \n\t opacity: 1 \n\t });\n\t progress.offsetWidth; /* Repaint */\n\t\n\t setTimeout(function() {\n\t css(progress, { \n\t transition: 'all ' + speed + 'ms linear', \n\t opacity: 0 \n\t });\n\t setTimeout(function() {\n\t NProgress.remove();\n\t next();\n\t }, speed);\n\t }, speed);\n\t } else {\n\t setTimeout(next, speed);\n\t }\n\t });\n\t\n\t return this;\n\t };\n\t\n\t NProgress.isStarted = function() {\n\t return typeof NProgress.status === 'number';\n\t };\n\t\n\t /**\n\t * Shows the progress bar.\n\t * This is the same as setting the status to 0%, except that it doesn't go backwards.\n\t *\n\t * NProgress.start();\n\t *\n\t */\n\t NProgress.start = function() {\n\t if (!NProgress.status) NProgress.set(0);\n\t\n\t var work = function() {\n\t setTimeout(function() {\n\t if (!NProgress.status) return;\n\t NProgress.trickle();\n\t work();\n\t }, Settings.trickleSpeed);\n\t };\n\t\n\t if (Settings.trickle) work();\n\t\n\t return this;\n\t };\n\t\n\t /**\n\t * Hides the progress bar.\n\t * This is the *sort of* the same as setting the status to 100%, with the\n\t * difference being `done()` makes some placebo effect of some realistic motion.\n\t *\n\t * NProgress.done();\n\t *\n\t * If `true` is passed, it will show the progress bar even if its hidden.\n\t *\n\t * NProgress.done(true);\n\t */\n\t\n\t NProgress.done = function(force) {\n\t if (!force && !NProgress.status) return this;\n\t\n\t return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n\t };\n\t\n\t /**\n\t * Increments by a random amount.\n\t */\n\t\n\t NProgress.inc = function(amount) {\n\t var n = NProgress.status;\n\t\n\t if (!n) {\n\t return NProgress.start();\n\t } else {\n\t if (typeof amount !== 'number') {\n\t amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n\t }\n\t\n\t n = clamp(n + amount, 0, 0.994);\n\t return NProgress.set(n);\n\t }\n\t };\n\t\n\t NProgress.trickle = function() {\n\t return NProgress.inc(Math.random() * Settings.trickleRate);\n\t };\n\t\n\t /**\n\t * Waits for all supplied jQuery promises and\n\t * increases the progress as the promises resolve.\n\t *\n\t * @param $promise jQUery Promise\n\t */\n\t (function() {\n\t var initial = 0, current = 0;\n\t\n\t NProgress.promise = function($promise) {\n\t if (!$promise || $promise.state() === \"resolved\") {\n\t return this;\n\t }\n\t\n\t if (current === 0) {\n\t NProgress.start();\n\t }\n\t\n\t initial++;\n\t current++;\n\t\n\t $promise.always(function() {\n\t current--;\n\t if (current === 0) {\n\t initial = 0;\n\t NProgress.done();\n\t } else {\n\t NProgress.set((initial - current) / initial);\n\t }\n\t });\n\t\n\t return this;\n\t };\n\t\n\t })();\n\t\n\t /**\n\t * (Internal) renders the progress bar markup based on the `template`\n\t * setting.\n\t */\n\t\n\t NProgress.render = function(fromStart) {\n\t if (NProgress.isRendered()) return document.getElementById('nprogress');\n\t\n\t addClass(document.documentElement, 'nprogress-busy');\n\t \n\t var progress = document.createElement('div');\n\t progress.id = 'nprogress';\n\t progress.innerHTML = Settings.template;\n\t\n\t var bar = progress.querySelector(Settings.barSelector),\n\t perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n\t parent = document.querySelector(Settings.parent),\n\t spinner;\n\t \n\t css(bar, {\n\t transition: 'all 0 linear',\n\t transform: 'translate3d(' + perc + '%,0,0)'\n\t });\n\t\n\t if (!Settings.showSpinner) {\n\t spinner = progress.querySelector(Settings.spinnerSelector);\n\t spinner && removeElement(spinner);\n\t }\n\t\n\t if (parent != document.body) {\n\t addClass(parent, 'nprogress-custom-parent');\n\t }\n\t\n\t parent.appendChild(progress);\n\t return progress;\n\t };\n\t\n\t /**\n\t * Removes the element. Opposite of render().\n\t */\n\t\n\t NProgress.remove = function() {\n\t removeClass(document.documentElement, 'nprogress-busy');\n\t removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n\t var progress = document.getElementById('nprogress');\n\t progress && removeElement(progress);\n\t };\n\t\n\t /**\n\t * Checks if the progress bar is rendered.\n\t */\n\t\n\t NProgress.isRendered = function() {\n\t return !!document.getElementById('nprogress');\n\t };\n\t\n\t /**\n\t * Determine which positioning CSS rule to use.\n\t */\n\t\n\t NProgress.getPositioningCSS = function() {\n\t // Sniff on document.body.style\n\t var bodyStyle = document.body.style;\n\t\n\t // Sniff prefixes\n\t var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n\t ('MozTransform' in bodyStyle) ? 'Moz' :\n\t ('msTransform' in bodyStyle) ? 'ms' :\n\t ('OTransform' in bodyStyle) ? 'O' : '';\n\t\n\t if (vendorPrefix + 'Perspective' in bodyStyle) {\n\t // Modern browsers with 3D support, e.g. Webkit, IE10\n\t return 'translate3d';\n\t } else if (vendorPrefix + 'Transform' in bodyStyle) {\n\t // Browsers without 3D support, e.g. IE9\n\t return 'translate';\n\t } else {\n\t // Browsers without translate() support, e.g. IE7-8\n\t return 'margin';\n\t }\n\t };\n\t\n\t /**\n\t * Helpers\n\t */\n\t\n\t function clamp(n, min, max) {\n\t if (n < min) return min;\n\t if (n > max) return max;\n\t return n;\n\t }\n\t\n\t /**\n\t * (Internal) converts a percentage (`0..1`) to a bar translateX\n\t * percentage (`-100%..0%`).\n\t */\n\t\n\t function toBarPerc(n) {\n\t return (-1 + n) * 100;\n\t }\n\t\n\t\n\t /**\n\t * (Internal) returns the correct CSS for changing the bar's\n\t * position given an n percentage, and speed and ease from Settings\n\t */\n\t\n\t function barPositionCSS(n, speed, ease) {\n\t var barCSS;\n\t\n\t if (Settings.positionUsing === 'translate3d') {\n\t barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n\t } else if (Settings.positionUsing === 'translate') {\n\t barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n\t } else {\n\t barCSS = { 'margin-left': toBarPerc(n)+'%' };\n\t }\n\t\n\t barCSS.transition = 'all '+speed+'ms '+ease;\n\t\n\t return barCSS;\n\t }\n\t\n\t /**\n\t * (Internal) Queues a function to be executed.\n\t */\n\t\n\t var queue = (function() {\n\t var pending = [];\n\t \n\t function next() {\n\t var fn = pending.shift();\n\t if (fn) {\n\t fn(next);\n\t }\n\t }\n\t\n\t return function(fn) {\n\t pending.push(fn);\n\t if (pending.length == 1) next();\n\t };\n\t })();\n\t\n\t /**\n\t * (Internal) Applies css properties to an element, similar to the jQuery \n\t * css method.\n\t *\n\t * While this helper does assist with vendor prefixed property names, it \n\t * does not perform any manipulation of values prior to setting styles.\n\t */\n\t\n\t var css = (function() {\n\t var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n\t cssProps = {};\n\t\n\t function camelCase(string) {\n\t return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n\t return letter.toUpperCase();\n\t });\n\t }\n\t\n\t function getVendorProp(name) {\n\t var style = document.body.style;\n\t if (name in style) return name;\n\t\n\t var i = cssPrefixes.length,\n\t capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t vendorName;\n\t while (i--) {\n\t vendorName = cssPrefixes[i] + capName;\n\t if (vendorName in style) return vendorName;\n\t }\n\t\n\t return name;\n\t }\n\t\n\t function getStyleProp(name) {\n\t name = camelCase(name);\n\t return cssProps[name] || (cssProps[name] = getVendorProp(name));\n\t }\n\t\n\t function applyCss(element, prop, value) {\n\t prop = getStyleProp(prop);\n\t element.style[prop] = value;\n\t }\n\t\n\t return function(element, properties) {\n\t var args = arguments,\n\t prop, \n\t value;\n\t\n\t if (args.length == 2) {\n\t for (prop in properties) {\n\t value = properties[prop];\n\t if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n\t }\n\t } else {\n\t applyCss(element, args[1], args[2]);\n\t }\n\t }\n\t })();\n\t\n\t /**\n\t * (Internal) Determines if an element or space separated list of class names contains a class name.\n\t */\n\t\n\t function hasClass(element, name) {\n\t var list = typeof element == 'string' ? element : classList(element);\n\t return list.indexOf(' ' + name + ' ') >= 0;\n\t }\n\t\n\t /**\n\t * (Internal) Adds a class to an element.\n\t */\n\t\n\t function addClass(element, name) {\n\t var oldList = classList(element),\n\t newList = oldList + name;\n\t\n\t if (hasClass(oldList, name)) return; \n\t\n\t // Trim the opening space.\n\t element.className = newList.substring(1);\n\t }\n\t\n\t /**\n\t * (Internal) Removes a class from an element.\n\t */\n\t\n\t function removeClass(element, name) {\n\t var oldList = classList(element),\n\t newList;\n\t\n\t if (!hasClass(element, name)) return;\n\t\n\t // Replace the class name.\n\t newList = oldList.replace(' ' + name + ' ', ' ');\n\t\n\t // Trim the opening and closing spaces.\n\t element.className = newList.substring(1, newList.length - 1);\n\t }\n\t\n\t /**\n\t * (Internal) Gets a space separated list of the class names on the element. \n\t * The list is wrapped with a single space on each end to facilitate finding \n\t * matches within the list.\n\t */\n\t\n\t function classList(element) {\n\t return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n\t }\n\t\n\t /**\n\t * (Internal) Removes an element from the DOM.\n\t */\n\t\n\t function removeElement(element) {\n\t element && element.parentNode && element.parentNode.removeChild(element);\n\t }\n\t\n\t return NProgress;\n\t});\n\t\n\n\n/***/ },\n/* 248 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 249 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* eslint-disable no-undefined */\n\t\n\tvar throttle = __webpack_require__(250);\n\t\n\t/**\n\t * Debounce execution of a function. Debouncing, unlike throttling,\n\t * guarantees that a function is only executed a single time, either at the\n\t * very beginning of a series of calls, or at the very end.\n\t *\n\t * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n\t * @param {Boolean} atBegin Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n\t * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n\t * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n\t * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n\t * to `callback` when the debounced-function is executed.\n\t *\n\t * @return {Function} A new, debounced function.\n\t */\n\tmodule.exports = function ( delay, atBegin, callback ) {\n\t\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n\t};\n\n\n/***/ },\n/* 250 */\n/***/ function(module, exports) {\n\n\t/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\t\n\t/**\n\t * Throttle execution of a function. Especially useful for rate limiting\n\t * execution of handlers on events like resize and scroll.\n\t *\n\t * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n\t * @param {Boolean} noTrailing Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n\t * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n\t * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n\t * the internal counter is reset)\n\t * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n\t * to `callback` when the throttled-function is executed.\n\t * @param {Boolean} debounceMode If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n\t * schedule `callback` to execute after `delay` ms.\n\t *\n\t * @return {Function} A new, throttled, function.\n\t */\n\tmodule.exports = function ( delay, noTrailing, callback, debounceMode ) {\n\t\n\t\t// After wrapper has stopped being called, this timeout ensures that\n\t\t// `callback` is executed at the proper times in `throttle` and `end`\n\t\t// debounce modes.\n\t\tvar timeoutID;\n\t\n\t\t// Keep track of the last time `callback` was executed.\n\t\tvar lastExec = 0;\n\t\n\t\t// `noTrailing` defaults to falsy.\n\t\tif ( typeof noTrailing !== 'boolean' ) {\n\t\t\tdebounceMode = callback;\n\t\t\tcallback = noTrailing;\n\t\t\tnoTrailing = undefined;\n\t\t}\n\t\n\t\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t\t// functionality and when executed will limit the rate at which `callback`\n\t\t// is executed.\n\t\tfunction wrapper () {\n\t\n\t\t\tvar self = this;\n\t\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\t\tvar args = arguments;\n\t\n\t\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\t\tfunction exec () {\n\t\t\t\tlastExec = Number(new Date());\n\t\t\t\tcallback.apply(self, args);\n\t\t\t}\n\t\n\t\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t\t// to allow future `callback` executions.\n\t\t\tfunction clear () {\n\t\t\t\ttimeoutID = undefined;\n\t\t\t}\n\t\n\t\t\tif ( debounceMode && !timeoutID ) {\n\t\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\t\texec();\n\t\t\t}\n\t\n\t\t\t// Clear any existing timeout.\n\t\t\tif ( timeoutID ) {\n\t\t\t\tclearTimeout(timeoutID);\n\t\t\t}\n\t\n\t\t\tif ( debounceMode === undefined && elapsed > delay ) {\n\t\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t\t// `callback`.\n\t\t\t\texec();\n\t\n\t\t\t} else if ( noTrailing !== true ) {\n\t\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t\t// recent execution.\n\t\t\t\t//\n\t\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t\t// after `delay` ms.\n\t\t\t\t//\n\t\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t\t// execute after `delay` ms.\n\t\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t\t}\n\t\n\t\t}\n\t\n\t\t// Return the wrapper function.\n\t\treturn wrapper;\n\t\n\t};\n\n\n/***/ },\n/* 251 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t!function(e,t){ true?module.exports=t(__webpack_require__(91)):\"function\"==typeof define&&define.amd?define(\"VuePopup\",[\"vue\"],t):\"object\"==typeof exports?exports.VuePopup=t(require(\"vue\")):e.VuePopup=t(e.vue)}(this,function(e){return function(e){function t(n){if(o[n])return o[n].exports;var i=o[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var o={};return t.m=e,t.c=o,t.i=function(e){return e},t.d=function(e,t,o){Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var o=e&&e.__esModule?function(){return e[\"default\"]}:function(){return e};return t.d(o,\"a\",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"/lib/\",t(t.s=6)}([function(e,t,o){\"use strict\";function n(e){return e&&e.__esModule?e:{\"default\":e}}t.__esModule=!0,t.PopupManager=void 0;var i=o(5),l=n(i),s=o(3),d=o(2),a=n(d);o(4);var r=1,u=[],c=function(e){if(u.indexOf(e)===-1){var t=function(e){var t=e.__vue__;if(!t){var o=e.previousSibling;o.__vue__&&(t=o.__vue__)}return t};l[\"default\"].transition(e,{afterEnter:function(e){var o=t(e);o&&o.doAfterOpen&&o.doAfterOpen()},afterLeave:function(e){var o=t(e);o&&o.doAfterClose&&o.doAfterClose()}})}},f=void 0,p=function(){if(void 0!==f)return f;var e=document.createElement(\"div\");e.style.visibility=\"hidden\",e.style.width=\"100px\",e.style.position=\"absolute\",e.style.top=\"-9999px\",document.body.appendChild(e);var t=e.offsetWidth;e.style.overflow=\"scroll\";var o=document.createElement(\"div\");o.style.width=\"100%\",e.appendChild(o);var n=o.offsetWidth;return e.parentNode.removeChild(e),t-n},h=function m(e){return 3===e.nodeType&&(e=e.nextElementSibling||e.nextSibling,m(e)),e};t[\"default\"]={props:{value:{type:Boolean,\"default\":!1},transition:{type:String,\"default\":\"\"},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,\"default\":!1},modalFade:{type:Boolean,\"default\":!0},modalClass:{},lockScroll:{type:Boolean,\"default\":!0},closeOnPressEscape:{type:Boolean,\"default\":!1},closeOnClickModal:{type:Boolean,\"default\":!1}},created:function(){this.transition&&c(this.transition)},beforeMount:function(){this._popupId=\"popup-\"+r++,a[\"default\"].register(this._popupId,this)},beforeDestroy:function(){a[\"default\"].deregister(this._popupId),a[\"default\"].closeModal(this._popupId),this.modal&&null!==this.bodyOverflow&&\"hidden\"!==this.bodyOverflow&&(document.body.style.overflow=this.bodyOverflow,document.body.style.paddingRight=this.bodyPaddingRight),this.bodyOverflow=null,this.bodyPaddingRight=null},data:function(){return{opened:!1,bodyOverflow:null,bodyPaddingRight:null,rendered:!1}},watch:{value:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,l[\"default\"].nextTick(function(){t.open()}))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0,this.$emit(\"input\",!0));var o=(0,s.merge)({},this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var n=Number(o.openDelay);n>0?this._openTimer=setTimeout(function(){t._openTimer=null,t.doOpen(o)},n):this.doOpen(o)},doOpen:function(e){if((!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0,this.visible=!0,this.$emit(\"input\",!0);var t=h(this.$el),o=e.modal,n=e.zIndex;if(n&&(a[\"default\"].zIndex=n),o&&(this._closing&&(a[\"default\"].closeModal(this._popupId),this._closing=!1),a[\"default\"].openModal(this._popupId,a[\"default\"].nextZIndex(),t,e.modalClass,e.modalFade),e.lockScroll)){this.bodyOverflow||(this.bodyPaddingRight=document.body.style.paddingRight,this.bodyOverflow=document.body.style.overflow),f=p();var i=document.documentElement.clientHeight
0&&i&&(document.body.style.paddingRight=f+\"px\"),document.body.style.overflow=\"hidden\"}\"static\"===getComputedStyle(t).position&&(t.style.position=\"absolute\"),o?t.style.zIndex=a[\"default\"].nextZIndex():n&&(t.style.zIndex=n),this.opened=!0,this.onOpen&&this.onOpen(),this.transition||this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout(function(){e._closeTimer=null,e.doClose()},t):this.doClose()}},doClose:function(){var e=this;this.visible=!1,this.$emit(\"input\",!1),this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(function(){e.modal&&\"hidden\"!==e.bodyOverflow&&(document.body.style.overflow=e.bodyOverflow,document.body.style.paddingRight=e.bodyPaddingRight),e.bodyOverflow=null,e.bodyPaddingRight=null},200),this.opened=!1,this.transition||this.doAfterClose()},doAfterClose:function(){a[\"default\"].closeModal(this._popupId),this._closing=!1}}},t.PopupManager=a[\"default\"]},function(e,t){var o=function(e){return(e||\"\").replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g,\"\")},n=function(e,t){if(!e||!t)return!1;if(t.indexOf(\" \")!=-1)throw new Error(\"className should not contain space.\");return e.classList?e.classList.contains(t):(\" \"+e.className+\" \").indexOf(\" \"+t+\" \")>-1},i=function(e,t){if(e){for(var o=e.className,i=(t||\"\").split(\" \"),l=0,s=i.length;l0){var i=t[t.length-1];if(i.id===e){if(i.modalClass){var s=i.modalClass.trim().split(/\\s+/);s.forEach(function(e){return(0,n.removeClass)(o,e)})}t.pop(),t.length>0&&(o.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,n.addClass)(o,\"v-modal-leave\"),setTimeout(function(){0===t.length&&(o.parentNode&&o.parentNode.removeChild(o),o.style.display=\"none\",d.modalDom=void 0),(0,n.removeClass)(o,\"v-modal-leave\")},200))}};window.addEventListener(\"keydown\",function(e){if(27===e.keyCode&&d.modalStack.length>0){var t=d.modalStack[d.modalStack.length-1];if(!t)return;var o=d.getInstance(t.id);o.closeOnPressEscape&&o.close()}}),t[\"default\"]=d},function(e,t){\"use strict\";function o(e){for(var t=1,o=arguments.length;t -1;\n\t }\n\t};\n\t\n\tvar addClass = function (el, cls) {\n\t if (!el) return;\n\t var curClass = el.className;\n\t var classes = (cls || '').split(' ');\n\t\n\t for (var i = 0, j = classes.length; i < j; i++) {\n\t var clsName = classes[i];\n\t if (!clsName) continue;\n\t\n\t if (el.classList) {\n\t el.classList.add(clsName);\n\t } else {\n\t if (!hasClass(el, clsName)) {\n\t curClass += ' ' + clsName;\n\t }\n\t }\n\t }\n\t if (!el.classList) {\n\t el.className = curClass;\n\t }\n\t};\n\t\n\tvar removeClass = function (el, cls) {\n\t if (!el || !cls) return;\n\t var classes = cls.split(' ');\n\t var curClass = ' ' + el.className + ' ';\n\t\n\t for (var i = 0, j = classes.length; i < j; i++) {\n\t var clsName = classes[i];\n\t if (!clsName) continue;\n\t\n\t if (el.classList) {\n\t el.classList.remove(clsName);\n\t } else {\n\t if (hasClass(el, clsName)) {\n\t curClass = curClass.replace(' ' + clsName + ' ', ' ');\n\t }\n\t }\n\t }\n\t if (!el.classList) {\n\t el.className = trim(curClass);\n\t }\n\t};\n\t\n\tmodule.exports = {\n\t hasClass: hasClass,\n\t addClass: addClass,\n\t removeClass: removeClass\n\t};\n\n/***/ },\n/* 253 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t/**\n\t * @module zrender/Element\n\t */\n\t\n\t\n\t var guid = __webpack_require__(261);\n\t var Eventful = __webpack_require__(70);\n\t var Transformable = __webpack_require__(268);\n\t var Animatable = __webpack_require__(816);\n\t var zrUtil = __webpack_require__(1);\n\t\n\t /**\n\t * @alias module:zrender/Element\n\t * @constructor\n\t * @extends {module:zrender/mixin/Animatable}\n\t * @extends {module:zrender/mixin/Transformable}\n\t * @extends {module:zrender/mixin/Eventful}\n\t */\n\t var Element = function (opts) {\n\t\n\t Transformable.call(this, opts);\n\t Eventful.call(this, opts);\n\t Animatable.call(this, opts);\n\t\n\t /**\n\t * 画布元素ID\n\t * @type {string}\n\t */\n\t this.id = opts.id || guid();\n\t };\n\t\n\t Element.prototype = {\n\t\n\t /**\n\t * 元素类型\n\t * Element type\n\t * @type {string}\n\t */\n\t type: 'element',\n\t\n\t /**\n\t * 元素名字\n\t * Element name\n\t * @type {string}\n\t */\n\t name: '',\n\t\n\t /**\n\t * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值\n\t * ZRender instance will be assigned when element is associated with zrender\n\t * @name module:/zrender/Element#__zr\n\t * @type {module:zrender/ZRender}\n\t */\n\t __zr: null,\n\t\n\t /**\n\t * 图形是否忽略,为true时忽略图形的绘制以及事件触发\n\t * If ignore drawing and events of the element object\n\t * @name module:/zrender/Element#ignore\n\t * @type {boolean}\n\t * @default false\n\t */\n\t ignore: false,\n\t\n\t /**\n\t * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪\n\t * 该路径会继承被裁减对象的变换\n\t * @type {module:zrender/graphic/Path}\n\t * @see http://www.w3.org/TR/2dcontext/#clipping-region\n\t * @readOnly\n\t */\n\t clipPath: null,\n\t\n\t /**\n\t * Drift element\n\t * @param {number} dx dx on the global space\n\t * @param {number} dy dy on the global space\n\t */\n\t drift: function (dx, dy) {\n\t switch (this.draggable) {\n\t case 'horizontal':\n\t dy = 0;\n\t break;\n\t case 'vertical':\n\t dx = 0;\n\t break;\n\t }\n\t\n\t var m = this.transform;\n\t if (!m) {\n\t m = this.transform = [1, 0, 0, 1, 0, 0];\n\t }\n\t m[4] += dx;\n\t m[5] += dy;\n\t\n\t this.decomposeTransform();\n\t this.dirty(false);\n\t },\n\t\n\t /**\n\t * Hook before update\n\t */\n\t beforeUpdate: function () {},\n\t /**\n\t * Hook after update\n\t */\n\t afterUpdate: function () {},\n\t /**\n\t * Update each frame\n\t */\n\t update: function () {\n\t this.updateTransform();\n\t },\n\t\n\t /**\n\t * @param {Function} cb\n\t * @param {} context\n\t */\n\t traverse: function (cb, context) {},\n\t\n\t /**\n\t * @protected\n\t */\n\t attrKV: function (key, value) {\n\t if (key === 'position' || key === 'scale' || key === 'origin') {\n\t // Copy the array\n\t if (value) {\n\t var target = this[key];\n\t if (!target) {\n\t target = this[key] = [];\n\t }\n\t target[0] = value[0];\n\t target[1] = value[1];\n\t }\n\t }\n\t else {\n\t this[key] = value;\n\t }\n\t },\n\t\n\t /**\n\t * Hide the element\n\t */\n\t hide: function () {\n\t this.ignore = true;\n\t this.__zr && this.__zr.refresh();\n\t },\n\t\n\t /**\n\t * Show the element\n\t */\n\t show: function () {\n\t this.ignore = false;\n\t this.__zr && this.__zr.refresh();\n\t },\n\t\n\t /**\n\t * @param {string|Object} key\n\t * @param {*} value\n\t */\n\t attr: function (key, value) {\n\t if (typeof key === 'string') {\n\t this.attrKV(key, value);\n\t }\n\t else if (zrUtil.isObject(key)) {\n\t for (var name in key) {\n\t if (key.hasOwnProperty(name)) {\n\t this.attrKV(name, key[name]);\n\t }\n\t }\n\t }\n\t\n\t this.dirty(false);\n\t\n\t return this;\n\t },\n\t\n\t /**\n\t * @param {module:zrender/graphic/Path} clipPath\n\t */\n\t setClipPath: function (clipPath) {\n\t var zr = this.__zr;\n\t if (zr) {\n\t clipPath.addSelfToZr(zr);\n\t }\n\t\n\t // Remove previous clip path\n\t if (this.clipPath && this.clipPath !== clipPath) {\n\t this.removeClipPath();\n\t }\n\t\n\t this.clipPath = clipPath;\n\t clipPath.__zr = zr;\n\t clipPath.__clipTarget = this;\n\t\n\t this.dirty(false);\n\t },\n\t\n\t /**\n\t */\n\t removeClipPath: function () {\n\t var clipPath = this.clipPath;\n\t if (clipPath) {\n\t if (clipPath.__zr) {\n\t clipPath.removeSelfFromZr(clipPath.__zr);\n\t }\n\t\n\t clipPath.__zr = null;\n\t clipPath.__clipTarget = null;\n\t this.clipPath = null;\n\t\n\t this.dirty(false);\n\t }\n\t },\n\t\n\t /**\n\t * Add self from zrender instance.\n\t * Not recursively because it will be invoked when element added to storage.\n\t * @param {module:zrender/ZRender} zr\n\t */\n\t addSelfToZr: function (zr) {\n\t this.__zr = zr;\n\t // 添加动画\n\t var animators = this.animators;\n\t if (animators) {\n\t for (var i = 0; i < animators.length; i++) {\n\t zr.animation.addAnimator(animators[i]);\n\t }\n\t }\n\t\n\t if (this.clipPath) {\n\t this.clipPath.addSelfToZr(zr);\n\t }\n\t },\n\t\n\t /**\n\t * Remove self from zrender instance.\n\t * Not recursively because it will be invoked when element added to storage.\n\t * @param {module:zrender/ZRender} zr\n\t */\n\t removeSelfFromZr: function (zr) {\n\t this.__zr = null;\n\t // 移除动画\n\t var animators = this.animators;\n\t if (animators) {\n\t for (var i = 0; i < animators.length; i++) {\n\t zr.animation.removeAnimator(animators[i]);\n\t }\n\t }\n\t\n\t if (this.clipPath) {\n\t this.clipPath.removeSelfFromZr(zr);\n\t }\n\t }\n\t };\n\t\n\t zrUtil.mixin(Element, Animatable);\n\t zrUtil.mixin(Element, Transformable);\n\t zrUtil.mixin(Element, Eventful);\n\t\n\t module.exports = Element;\n\n\n/***/ },\n/* 254 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @module echarts/animation/Animator\n\t */\n\t\n\t\n\t var Clip = __webpack_require__(794);\n\t var color = __webpack_require__(51);\n\t var util = __webpack_require__(1);\n\t var isArrayLike = util.isArrayLike;\n\t\n\t var arraySlice = Array.prototype.slice;\n\t\n\t function defaultGetter(target, key) {\n\t return target[key];\n\t }\n\t\n\t function defaultSetter(target, key, value) {\n\t target[key] = value;\n\t }\n\t\n\t /**\n\t * @param {number} p0\n\t * @param {number} p1\n\t * @param {number} percent\n\t * @return {number}\n\t */\n\t function interpolateNumber(p0, p1, percent) {\n\t return (p1 - p0) * percent + p0;\n\t }\n\t\n\t /**\n\t * @param {string} p0\n\t * @param {string} p1\n\t * @param {number} percent\n\t * @return {string}\n\t */\n\t function interpolateString(p0, p1, percent) {\n\t return percent > 0.5 ? p1 : p0;\n\t }\n\t\n\t /**\n\t * @param {Array} p0\n\t * @param {Array} p1\n\t * @param {number} percent\n\t * @param {Array} out\n\t * @param {number} arrDim\n\t */\n\t function interpolateArray(p0, p1, percent, out, arrDim) {\n\t var len = p0.length;\n\t if (arrDim == 1) {\n\t for (var i = 0; i < len; i++) {\n\t out[i] = interpolateNumber(p0[i], p1[i], percent);\n\t }\n\t }\n\t else {\n\t var len2 = p0[0].length;\n\t for (var i = 0; i < len; i++) {\n\t for (var j = 0; j < len2; j++) {\n\t out[i][j] = interpolateNumber(\n\t p0[i][j], p1[i][j], percent\n\t );\n\t }\n\t }\n\t }\n\t }\n\t\n\t // arr0 is source array, arr1 is target array.\n\t // Do some preprocess to avoid error happened when interpolating from arr0 to arr1\n\t function fillArr(arr0, arr1, arrDim) {\n\t var arr0Len = arr0.length;\n\t var arr1Len = arr1.length;\n\t if (arr0Len !== arr1Len) {\n\t // FIXME Not work for TypedArray\n\t var isPreviousLarger = arr0Len > arr1Len;\n\t if (isPreviousLarger) {\n\t // Cut the previous\n\t arr0.length = arr1Len;\n\t }\n\t else {\n\t // Fill the previous\n\t for (var i = arr0Len; i < arr1Len; i++) {\n\t arr0.push(\n\t arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i])\n\t );\n\t }\n\t }\n\t }\n\t // Handling NaN value\n\t var len2 = arr0[0] && arr0[0].length;\n\t for (var i = 0; i < arr0.length; i++) {\n\t if (arrDim === 1) {\n\t if (isNaN(arr0[i])) {\n\t arr0[i] = arr1[i];\n\t }\n\t }\n\t else {\n\t for (var j = 0; j < len2; j++) {\n\t if (isNaN(arr0[i][j])) {\n\t arr0[i][j] = arr1[i][j];\n\t }\n\t }\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * @param {Array} arr0\n\t * @param {Array} arr1\n\t * @param {number} arrDim\n\t * @return {boolean}\n\t */\n\t function isArraySame(arr0, arr1, arrDim) {\n\t if (arr0 === arr1) {\n\t return true;\n\t }\n\t var len = arr0.length;\n\t if (len !== arr1.length) {\n\t return false;\n\t }\n\t if (arrDim === 1) {\n\t for (var i = 0; i < len; i++) {\n\t if (arr0[i] !== arr1[i]) {\n\t return false;\n\t }\n\t }\n\t }\n\t else {\n\t var len2 = arr0[0].length;\n\t for (var i = 0; i < len; i++) {\n\t for (var j = 0; j < len2; j++) {\n\t if (arr0[i][j] !== arr1[i][j]) {\n\t return false;\n\t }\n\t }\n\t }\n\t }\n\t return true;\n\t }\n\t\n\t /**\n\t * Catmull Rom interpolate array\n\t * @param {Array} p0\n\t * @param {Array} p1\n\t * @param {Array} p2\n\t * @param {Array} p3\n\t * @param {number} t\n\t * @param {number} t2\n\t * @param {number} t3\n\t * @param {Array} out\n\t * @param {number} arrDim\n\t */\n\t function catmullRomInterpolateArray(\n\t p0, p1, p2, p3, t, t2, t3, out, arrDim\n\t ) {\n\t var len = p0.length;\n\t if (arrDim == 1) {\n\t for (var i = 0; i < len; i++) {\n\t out[i] = catmullRomInterpolate(\n\t p0[i], p1[i], p2[i], p3[i], t, t2, t3\n\t );\n\t }\n\t }\n\t else {\n\t var len2 = p0[0].length;\n\t for (var i = 0; i < len; i++) {\n\t for (var j = 0; j < len2; j++) {\n\t out[i][j] = catmullRomInterpolate(\n\t p0[i][j], p1[i][j], p2[i][j], p3[i][j],\n\t t, t2, t3\n\t );\n\t }\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * Catmull Rom interpolate number\n\t * @param {number} p0\n\t * @param {number} p1\n\t * @param {number} p2\n\t * @param {number} p3\n\t * @param {number} t\n\t * @param {number} t2\n\t * @param {number} t3\n\t * @return {number}\n\t */\n\t function catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n\t var v0 = (p2 - p0) * 0.5;\n\t var v1 = (p3 - p1) * 0.5;\n\t return (2 * (p1 - p2) + v0 + v1) * t3\n\t + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n\t + v0 * t + p1;\n\t }\n\t\n\t function cloneValue(value) {\n\t if (isArrayLike(value)) {\n\t var len = value.length;\n\t if (isArrayLike(value[0])) {\n\t var ret = [];\n\t for (var i = 0; i < len; i++) {\n\t ret.push(arraySlice.call(value[i]));\n\t }\n\t return ret;\n\t }\n\t\n\t return arraySlice.call(value);\n\t }\n\t\n\t return value;\n\t }\n\t\n\t function rgba2String(rgba) {\n\t rgba[0] = Math.floor(rgba[0]);\n\t rgba[1] = Math.floor(rgba[1]);\n\t rgba[2] = Math.floor(rgba[2]);\n\t\n\t return 'rgba(' + rgba.join(',') + ')';\n\t }\n\t\n\t function createTrackClip (animator, easing, oneTrackDone, keyframes, propName) {\n\t var getter = animator._getter;\n\t var setter = animator._setter;\n\t var useSpline = easing === 'spline';\n\t\n\t var trackLen = keyframes.length;\n\t if (!trackLen) {\n\t return;\n\t }\n\t // Guess data type\n\t var firstVal = keyframes[0].value;\n\t var isValueArray = isArrayLike(firstVal);\n\t var isValueColor = false;\n\t var isValueString = false;\n\t\n\t // For vertices morphing\n\t var arrDim = (\n\t isValueArray\n\t && isArrayLike(firstVal[0])\n\t )\n\t ? 2 : 1;\n\t var trackMaxTime;\n\t // Sort keyframe as ascending\n\t keyframes.sort(function(a, b) {\n\t return a.time - b.time;\n\t });\n\t\n\t trackMaxTime = keyframes[trackLen - 1].time;\n\t // Percents of each keyframe\n\t var kfPercents = [];\n\t // Value of each keyframe\n\t var kfValues = [];\n\t var prevValue = keyframes[0].value;\n\t var isAllValueEqual = true;\n\t for (var i = 0; i < trackLen; i++) {\n\t kfPercents.push(keyframes[i].time / trackMaxTime);\n\t // Assume value is a color when it is a string\n\t var value = keyframes[i].value;\n\t\n\t // Check if value is equal, deep check if value is array\n\t if (!((isValueArray && isArraySame(value, prevValue, arrDim))\n\t || (!isValueArray && value === prevValue))) {\n\t isAllValueEqual = false;\n\t }\n\t prevValue = value;\n\t\n\t // Try converting a string to a color array\n\t if (typeof value == 'string') {\n\t var colorArray = color.parse(value);\n\t if (colorArray) {\n\t value = colorArray;\n\t isValueColor = true;\n\t }\n\t else {\n\t isValueString = true;\n\t }\n\t }\n\t kfValues.push(value);\n\t }\n\t if (isAllValueEqual) {\n\t return;\n\t }\n\t\n\t var lastValue = kfValues[trackLen - 1];\n\t // Polyfill array and NaN value\n\t for (var i = 0; i < trackLen - 1; i++) {\n\t if (isValueArray) {\n\t fillArr(kfValues[i], lastValue, arrDim);\n\t }\n\t else {\n\t if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n\t kfValues[i] = lastValue;\n\t }\n\t }\n\t }\n\t isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim);\n\t\n\t // Cache the key of last frame to speed up when\n\t // animation playback is sequency\n\t var lastFrame = 0;\n\t var lastFramePercent = 0;\n\t var start;\n\t var w;\n\t var p0;\n\t var p1;\n\t var p2;\n\t var p3;\n\t\n\t if (isValueColor) {\n\t var rgba = [0, 0, 0, 0];\n\t }\n\t\n\t var onframe = function (target, percent) {\n\t // Find the range keyframes\n\t // kf1-----kf2---------current--------kf3\n\t // find kf2 and kf3 and do interpolation\n\t var frame;\n\t // In the easing function like elasticOut, percent may less than 0\n\t if (percent < 0) {\n\t frame = 0;\n\t }\n\t else if (percent < lastFramePercent) {\n\t // Start from next key\n\t // PENDING start from lastFrame ?\n\t start = Math.min(lastFrame + 1, trackLen - 1);\n\t for (frame = start; frame >= 0; frame--) {\n\t if (kfPercents[frame] <= percent) {\n\t break;\n\t }\n\t }\n\t // PENDING really need to do this ?\n\t frame = Math.min(frame, trackLen - 2);\n\t }\n\t else {\n\t for (frame = lastFrame; frame < trackLen; frame++) {\n\t if (kfPercents[frame] > percent) {\n\t break;\n\t }\n\t }\n\t frame = Math.min(frame - 1, trackLen - 2);\n\t }\n\t lastFrame = frame;\n\t lastFramePercent = percent;\n\t\n\t var range = (kfPercents[frame + 1] - kfPercents[frame]);\n\t if (range === 0) {\n\t return;\n\t }\n\t else {\n\t w = (percent - kfPercents[frame]) / range;\n\t }\n\t if (useSpline) {\n\t p1 = kfValues[frame];\n\t p0 = kfValues[frame === 0 ? frame : frame - 1];\n\t p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];\n\t p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];\n\t if (isValueArray) {\n\t catmullRomInterpolateArray(\n\t p0, p1, p2, p3, w, w * w, w * w * w,\n\t getter(target, propName),\n\t arrDim\n\t );\n\t }\n\t else {\n\t var value;\n\t if (isValueColor) {\n\t value = catmullRomInterpolateArray(\n\t p0, p1, p2, p3, w, w * w, w * w * w,\n\t rgba, 1\n\t );\n\t value = rgba2String(rgba);\n\t }\n\t else if (isValueString) {\n\t // String is step(0.5)\n\t return interpolateString(p1, p2, w);\n\t }\n\t else {\n\t value = catmullRomInterpolate(\n\t p0, p1, p2, p3, w, w * w, w * w * w\n\t );\n\t }\n\t setter(\n\t target,\n\t propName,\n\t value\n\t );\n\t }\n\t }\n\t else {\n\t if (isValueArray) {\n\t interpolateArray(\n\t kfValues[frame], kfValues[frame + 1], w,\n\t getter(target, propName),\n\t arrDim\n\t );\n\t }\n\t else {\n\t var value;\n\t if (isValueColor) {\n\t interpolateArray(\n\t kfValues[frame], kfValues[frame + 1], w,\n\t rgba, 1\n\t );\n\t value = rgba2String(rgba);\n\t }\n\t else if (isValueString) {\n\t // String is step(0.5)\n\t return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n\t }\n\t else {\n\t value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n\t }\n\t setter(\n\t target,\n\t propName,\n\t value\n\t );\n\t }\n\t }\n\t };\n\t\n\t var clip = new Clip({\n\t target: animator._target,\n\t life: trackMaxTime,\n\t loop: animator._loop,\n\t delay: animator._delay,\n\t onframe: onframe,\n\t ondestroy: oneTrackDone\n\t });\n\t\n\t if (easing && easing !== 'spline') {\n\t clip.easing = easing;\n\t }\n\t\n\t return clip;\n\t }\n\t\n\t /**\n\t * @alias module:zrender/animation/Animator\n\t * @constructor\n\t * @param {Object} target\n\t * @param {boolean} loop\n\t * @param {Function} getter\n\t * @param {Function} setter\n\t */\n\t var Animator = function(target, loop, getter, setter) {\n\t this._tracks = {};\n\t this._target = target;\n\t\n\t this._loop = loop || false;\n\t\n\t this._getter = getter || defaultGetter;\n\t this._setter = setter || defaultSetter;\n\t\n\t this._clipCount = 0;\n\t\n\t this._delay = 0;\n\t\n\t this._doneList = [];\n\t\n\t this._onframeList = [];\n\t\n\t this._clipList = [];\n\t };\n\t\n\t Animator.prototype = {\n\t /**\n\t * 设置动画关键帧\n\t * @param {number} time 关键帧时间,单位是ms\n\t * @param {Object} props 关键帧的属性值,key-value表示\n\t * @return {module:zrender/animation/Animator}\n\t */\n\t when: function(time /* ms */, props) {\n\t var tracks = this._tracks;\n\t for (var propName in props) {\n\t if (!props.hasOwnProperty(propName)) {\n\t continue;\n\t }\n\t\n\t if (!tracks[propName]) {\n\t tracks[propName] = [];\n\t // Invalid value\n\t var value = this._getter(this._target, propName);\n\t if (value == null) {\n\t // zrLog('Invalid property ' + propName);\n\t continue;\n\t }\n\t // If time is 0\n\t // Then props is given initialize value\n\t // Else\n\t // Initialize value from current prop value\n\t if (time !== 0) {\n\t tracks[propName].push({\n\t time: 0,\n\t value: cloneValue(value)\n\t });\n\t }\n\t }\n\t tracks[propName].push({\n\t time: time,\n\t value: props[propName]\n\t });\n\t }\n\t return this;\n\t },\n\t /**\n\t * 添加动画每一帧的回调函数\n\t * @param {Function} callback\n\t * @return {module:zrender/animation/Animator}\n\t */\n\t during: function (callback) {\n\t this._onframeList.push(callback);\n\t return this;\n\t },\n\t\n\t _doneCallback: function () {\n\t // Clear all tracks\n\t this._tracks = {};\n\t // Clear all clips\n\t this._clipList.length = 0;\n\t\n\t var doneList = this._doneList;\n\t var len = doneList.length;\n\t for (var i = 0; i < len; i++) {\n\t doneList[i].call(this);\n\t }\n\t },\n\t /**\n\t * 开始执行动画\n\t * @param {string|Function} easing\n\t * 动画缓动函数,详见{@link module:zrender/animation/easing}\n\t * @return {module:zrender/animation/Animator}\n\t */\n\t start: function (easing) {\n\t\n\t var self = this;\n\t var clipCount = 0;\n\t\n\t var oneTrackDone = function() {\n\t clipCount--;\n\t if (!clipCount) {\n\t self._doneCallback();\n\t }\n\t };\n\t\n\t var lastClip;\n\t for (var propName in this._tracks) {\n\t if (!this._tracks.hasOwnProperty(propName)) {\n\t continue;\n\t }\n\t var clip = createTrackClip(\n\t this, easing, oneTrackDone,\n\t this._tracks[propName], propName\n\t );\n\t if (clip) {\n\t this._clipList.push(clip);\n\t clipCount++;\n\t\n\t // If start after added to animation\n\t if (this.animation) {\n\t this.animation.addClip(clip);\n\t }\n\t\n\t lastClip = clip;\n\t }\n\t }\n\t\n\t // Add during callback on the last clip\n\t if (lastClip) {\n\t var oldOnFrame = lastClip.onframe;\n\t lastClip.onframe = function (target, percent) {\n\t oldOnFrame(target, percent);\n\t\n\t for (var i = 0; i < self._onframeList.length; i++) {\n\t self._onframeList[i](target, percent);\n\t }\n\t };\n\t }\n\t\n\t if (!clipCount) {\n\t this._doneCallback();\n\t }\n\t return this;\n\t },\n\t /**\n\t * 停止动画\n\t * @param {boolean} forwardToLast If move to last frame before stop\n\t */\n\t stop: function (forwardToLast) {\n\t var clipList = this._clipList;\n\t var animation = this.animation;\n\t for (var i = 0; i < clipList.length; i++) {\n\t var clip = clipList[i];\n\t if (forwardToLast) {\n\t // Move to last frame before stop\n\t clip.onframe(this._target, 1);\n\t }\n\t animation && animation.removeClip(clip);\n\t }\n\t clipList.length = 0;\n\t },\n\t /**\n\t * 设置动画延迟开始的时间\n\t * @param {number} time 单位ms\n\t * @return {module:zrender/animation/Animator}\n\t */\n\t delay: function (time) {\n\t this._delay = time;\n\t return this;\n\t },\n\t /**\n\t * 添加动画结束的回调\n\t * @param {Function} cb\n\t * @return {module:zrender/animation/Animator}\n\t */\n\t done: function(cb) {\n\t if (cb) {\n\t this._doneList.push(cb);\n\t }\n\t return this;\n\t },\n\t\n\t /**\n\t * @return {Array.}\n\t */\n\t getClips: function () {\n\t return this._clipList;\n\t }\n\t };\n\t\n\t module.exports = Animator;\n\n\n/***/ },\n/* 255 */\n/***/ function(module, exports) {\n\n\t\n\t\n\t module.exports = (typeof window !== 'undefined' &&\n\t (window.requestAnimationFrame\n\t || window.msRequestAnimationFrame\n\t || window.mozRequestAnimationFrame\n\t || window.webkitRequestAnimationFrame))\n\t || function (func) {\n\t setTimeout(func, 16);\n\t };\n\t\n\n\n/***/ },\n/* 256 */\n/***/ function(module, exports) {\n\n\t\n\t module.exports = {\n\t /**\n\t * 线段包含判断\n\t * @param {number} x0\n\t * @param {number} y0\n\t * @param {number} x1\n\t * @param {number} y1\n\t * @param {number} lineWidth\n\t * @param {number} x\n\t * @param {number} y\n\t * @return {boolean}\n\t */\n\t containStroke: function (x0, y0, x1, y1, lineWidth, x, y) {\n\t if (lineWidth === 0) {\n\t return false;\n\t }\n\t var _l = lineWidth;\n\t var _a = 0;\n\t var _b = x0;\n\t // Quick reject\n\t if (\n\t (y > y0 + _l && y > y1 + _l)\n\t || (y < y0 - _l && y < y1 - _l)\n\t || (x > x0 + _l && x > x1 + _l)\n\t || (x < x0 - _l && x < x1 - _l)\n\t ) {\n\t return false;\n\t }\n\t\n\t if (x0 !== x1) {\n\t _a = (y0 - y1) / (x0 - x1);\n\t _b = (x0 * y1 - x1 * y0) / (x0 - x1) ;\n\t }\n\t else {\n\t return Math.abs(x - x0) <= _l / 2;\n\t }\n\t var tmp = _a * x - y + _b;\n\t var _s = tmp * tmp / (_a * _a + 1);\n\t return _s <= _l / 2 * _l / 2;\n\t }\n\t };\n\n\n/***/ },\n/* 257 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t var windingLine = __webpack_require__(260);\n\t\n\t var EPSILON = 1e-8;\n\t\n\t function isAroundEqual(a, b) {\n\t return Math.abs(a - b) < EPSILON;\n\t }\n\t\n\t function contain(points, x, y) {\n\t var w = 0;\n\t var p = points[0];\n\t\n\t if (!p) {\n\t return false;\n\t }\n\t\n\t for (var i = 1; i < points.length; i++) {\n\t var p2 = points[i];\n\t w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n\t p = p2;\n\t }\n\t\n\t // Close polygon\n\t var p0 = points[0];\n\t if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {\n\t w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n\t }\n\t\n\t return w !== 0;\n\t }\n\t\n\t\n\t module.exports = {\n\t contain: contain\n\t };\n\n\n/***/ },\n/* 258 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t var curve = __webpack_require__(58);\n\t\n\t module.exports = {\n\t /**\n\t * 二次贝塞尔曲线描边包含判断\n\t * @param {number} x0\n\t * @param {number} y0\n\t * @param {number} x1\n\t * @param {number} y1\n\t * @param {number} x2\n\t * @param {number} y2\n\t * @param {number} lineWidth\n\t * @param {number} x\n\t * @param {number} y\n\t * @return {boolean}\n\t */\n\t containStroke: function (x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n\t if (lineWidth === 0) {\n\t return false;\n\t }\n\t var _l = lineWidth;\n\t // Quick reject\n\t if (\n\t (y > y0 + _l && y > y1 + _l && y > y2 + _l)\n\t || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\n\t || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\n\t || (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n\t ) {\n\t return false;\n\t }\n\t var d = curve.quadraticProjectPoint(\n\t x0, y0, x1, y1, x2, y2,\n\t x, y, null\n\t );\n\t return d <= _l / 2;\n\t }\n\t };\n\n\n/***/ },\n/* 259 */\n/***/ function(module, exports) {\n\n\t\n\t\n\t var PI2 = Math.PI * 2;\n\t module.exports = {\n\t normalizeRadian: function(angle) {\n\t angle %= PI2;\n\t if (angle < 0) {\n\t angle += PI2;\n\t }\n\t return angle;\n\t }\n\t };\n\n\n/***/ },\n/* 260 */\n/***/ function(module, exports) {\n\n\t\n\t module.exports = function windingLine(x0, y0, x1, y1, x, y) {\n\t if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n\t return 0;\n\t }\n\t // Ignore horizontal line\n\t if (y1 === y0) {\n\t return 0;\n\t }\n\t var dir = y1 < y0 ? 1 : -1;\n\t var t = (y - y0) / (y1 - y0);\n\t\n\t // Avoid winding error when intersection point is the connect point of two line of polygon\n\t if (t === 1 || t === 0) {\n\t dir = y1 < y0 ? 0.5 : -0.5;\n\t }\n\t\n\t var x_ = t * (x1 - x0) + x0;\n\t\n\t return x_ > x ? dir : 0;\n\t };\n\n\n/***/ },\n/* 261 */\n/***/ function(module, exports) {\n\n\t/**\n\t * zrender: 生成唯一id\n\t *\n\t * @author errorrik (errorrik@gmail.com)\n\t */\n\t\n\t\n\t var idStart = 0x0907;\n\t\n\t module.exports = function () {\n\t return idStart++;\n\t };\n\t\n\n\n/***/ },\n/* 262 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t\n\t var zrUtil = __webpack_require__(1);\n\t\n\t var Gradient = __webpack_require__(117);\n\t\n\t /**\n\t * x, y, x2, y2 are all percent from 0 to 1\n\t * @param {number} [x=0]\n\t * @param {number} [y=0]\n\t * @param {number} [x2=1]\n\t * @param {number} [y2=0]\n\t * @param {Array.